package c1762;

import java.util.Arrays;
import java.util.Scanner;

public class E2 {
    static long n;
    static long []dp=new long[20];
    static long []ans =new long[20];
    static long[] zeroNum=new long[20];  //zeroNum 用于记录 n 位数的前导 0 个数
    static long[] pow10=new long [20];  //pow10 用于记录 10 的次方数

    static void makeDp(){
        pow10[0]=1;
        for(int i=1;i<15;i++) pow10[i] = pow10[i-1]*10;
        dp[0]=0;
        dp[1]=1;
        zeroNum[0]=zeroNum[1]=0;
        for(int i=2;i<15;i++){
            pow10[i]=pow10[i-1]*10;
            zeroNum[i]=zeroNum[i-1] + pow10[i-1];
            dp[i]=10*dp[i-1] + pow10[i-1];
        }

    }

    static void solve(long n,long ans[]){
        if(n==0){
            ans[0]=1;
            return;
        }
        int bitNum = (int) (Math.log10(n) + 1);
        long []num=new long [20];
        long nTmp = n;
        for(int i=1;i<=bitNum;i++){
            num[i] = nTmp%10;
            nTmp/=10;
        }
        for(int i = (int) bitNum; i>=1; i--){
            long x = num[i];
            long y = i;
            n -= x*pow10[(int) (y-1)];
            long z = n;
            for(int j=0;j<10;j++){
                ans[j] += dp[(int) (y-1)]*x;
            }
            for(int j=0;j<x;j++){
                ans[j]+=pow10[(int) (y-1)];
            }
            ans[(int) x] += z+1;
        }
        ans[0]-=zeroNum[(int) bitNum];
    }
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        makeDp();
        solve(n,ans);
        for(int i=0;i<10;i++){
            if(i==0) System.out.println(ans[i]-1);
            else System.out.println(ans[i]);
        }
    }
}